The present invention relates generally to data processing and, in particular, to inter-thread communication within a multithreaded data processing environment.
In conventional symmetric multiprocessor (SMP) data processing environments, it is typical for programming to subdivide the various workloads into multiple (and possibly numerous) concurrent software threads of execution. Commonly, some software threads are generally employed to produce data and are therefore termed “producer threads,” while others of the threads generally consume the data produced by the producer threads and are therefore termed “consumer threads.” This division of labor between threads requires inter-thread communication in order to deliver the data produced by the producer threads to the consumer threads.
In conventional SMP data processing environments, such as that illustrated in FIG. 1, inter-thread communication is typically implemented utilizing a “yank-and-pull” methodology. According to this methodology, a producer thread 100 produces a value, represented in this example as cache line A, which is accessed and processed (i.e., consumed) by a (possibly remote) consumer thread 102. In the depicted processing scenario, the current value of cache line A resides at some initial time in the local memory (e.g., a cache) of consumer thread 102. In order to establish an updated value of cache line A, producer 100 “yanks” the value back to its local memory by acquiring a semaphore that grants permission to modify cache line A and by issuing, via a coherent communication network, a request 104a for the current value of cache line A. In response to request 104a, consumer 102 invalidates its copy of cache line A, and the value of cache line A is transmitted to producer 100 in a data tenure 106a. 
In response to receipt of the current value of cache line A, producer thread 100 performs the processing necessary to produce an updated value of cache line A. At the conclusion of its processing, producer thread 100 executes a store operation to release the semaphore and a barrier operation to make the release of the semaphore visible to other threads, including consumer thread 102. While producer thread 100 is performing the processing necessary to produce the updated value of cache line A, consumer thread 102 executes a polling loop in which it seeks to acquire the semaphore. When the release of the semaphore by producer thread 100 becomes visible to consumer thread 102, consumer thread 102 exits the polling loop and “pulls” the updated value of cache line A to its local memory (e.g., cache) by issuing, via the coherent communication network, a request 104b for cache line A. In response to request 104b, the updated value of cache line A is transmitted to consumer thread 102 in data tenure 106b. 
The present disclosure appreciates that the conventional yank-and-pull methodology for inter-thread communication depicted in FIG. 1 has a number of drawbacks. First, the yank-and-pull methodology has a relatively high latency due to the execution of both the “yank” and “pull” phases and a barrier operation. Second, the yank-and-pull methodology consumes significant data bandwidth of the coherent communication network due to the two movements of cache line A. Third, the polling employed by the consumer thread in the yank-and-pull methodology contributes to low processor efficiency and unproductive power dissipation. Fourth, the yank-and-pull methodology is limited to communication between threads executing within the same SMP system that both have access to a shared address space (e.g., threads within the same process or logical partition (LPAR)). Fifth, to ensure security, the yank-and-pull methodology requires an underlying operating system to establish appropriate page table settings to authorize communication between the producer thread 100 and consumer thread 102. Sixth, the yank-and-pull methodology is limited to one-to-one pairwise communication between threads and does not support one-to-many, many-to-one, or many-to-many thread communication.